#include "..\CookHeader.h"

// ü     κ
typedef struct _Node {
	string data[2]; // ̸, ̸
	struct _Node* link = NULL;
} Node2;

Array <Node2*> memory;
Node2* head, * current, * pre;

// Լ  κ
void printNodes2(Node2* start) {
	if (start == NULL)
		return;
	Node2* current = start;
	print("[" + current->data[0] + "," + current->data[1] + "]");
	while (current->link != NULL) {
		current = current->link;
		print("[" + current->data[0] + "," + current->data[1] + "]");
	}
	println("");
}

void freeMemory() { // Ҵ   ޸𸮸 Ѵ.
	for (int i = 0; i < len(memory); i++)
		delete memory[i];
}

void makeSimpleLInkedList(Array <string> nameEmail) {
	Node2* node;
	node = new Node2;
	node->data[0] = nameEmail[0];
	node->data[1] = nameEmail[1];
	memory.push_back(node);
	if (head == NULL) {						// ù °  
		head = node;
		return;
	}
	if (head->data[1] > nameEmail[1]) {		// ù ° 庸  
		node->link = head;
		head = node;
		return;
	}
	
	current = head;			// ߰  ϴ 
	while (current->link != NULL) {
		pre = current;
		current = current->link;
		if (current->data[0] > nameEmail[0]) {
			pre->link = node;
			node->link = current;
			return;
		}
	}
	
	current->link = node;	// ϴ 尡  ū 
}

//  ڵ κ
int main() {

	string name, email;
	while (true) {
		input(name, "̸-->");
		if (name == "x" || name == "X")
			break;
		input(email, "̸-->");
		makeSimpleLInkedList({ name, email });
		printNodes2(head);
	}

	freeMemory();
}